/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.core.view.mbean;

import com.brain.core.common.UtilCore;
import com.brain.core.dto.EmpresaDto;
import com.brain.core.dto.OrganizacionDto;
import com.brain.core.dto.PropietarioDto;
import com.brain.core.dto.PropietarioDtoPK;

import com.brain.core.exception.DAOException;
import com.brain.core.manager.OrganizacionManager;
import com.brain.core.manager.PropietarioManager;
import com.brain.core.manager.RecursosManager;

import java.io.Serializable;
import java.util.List;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Indra
 */
@Controller("propietarioMBean")
@Scope("session")
public class PropietarioMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(PropietarioMBean.class);
    
    @Resource
    private PropietarioManager manager;
    
    @Resource
    private RecursosManager recursosManager;
    @Resource
    private OrganizacionManager organizacionManager;
    
    @Autowired
    private ApplicationMBean applicationMBean;
    @Autowired
    private SessionMBean sessionMBean;
    
    private List<PropietarioDto> lista;
    private PropietarioDto dto;
    
    private Long empresa;
    private OrganizacionDto organizacionDto;
    private Boolean estado;
    private Boolean principal;
    
    private String keyEntidad = "key.entidad.propietario";
    
    private List<OrganizacionDto> listaOrganizaciones;
    

    public PropietarioMBean() {
        this.organizacionDto = new OrganizacionDto();
    }

    public String iniciar() {
        this.lista = null;
        this.dto = null;            
        
        return manager.getUrlLista();
    }
    
    public void eliminarPropietario() throws DAOException {
        manager.eliminar(this.dto);
        cargarPropietariosRegistro();
        
    }
    
    public void inicializarCampos(){
        this.principal = Boolean.FALSE;
        this.estado = Boolean.TRUE;
    }
    
    public void nuevoPropietario () {
        boolean existe = false;
        if (this.organizacionDto!=null && this.organizacionDto.getId()!= null) {
           cargarPropietariosRegistro();
           for (PropietarioDto p : this.lista) {
               if (this.organizacionDto.equals(p.getPk().getOrganizacionDto())) {
                   existe = true;
                   break;
               }
           }
           if (!existe) { //Si no existe lo agregamos
               this.dto = new PropietarioDto();
               this.dto.setPk(new PropietarioDtoPK(sessionMBean.getEntidad(), sessionMBean.getRegistro(), this.organizacionDto));
               this.dto.setEstado(this.estado);
               this.dto.setPrincipal(this.principal);
               guardar();
               cargarPropietariosRegistro();
               inicializarCampos();
           }else{
               recursosManager.showWarning(UtilCore.Internacionalizacion.getMensajeInternacional("propietario.mensaje.repetido")); 
           }
        }
    }
    
    
    public void cargarPropietariosRegistro() {
        try {
            PropietarioDto filtro = new PropietarioDto();
            PropietarioDtoPK pk = new PropietarioDtoPK();
            pk.setEntidad(sessionMBean.getEntidad());
            pk.setRegistro(sessionMBean.getRegistro());
            filtro.setPk(pk);            
            this.lista = this.manager.obtenerPropietariosEntidadPopup(filtro);
        } catch (DAOException ex) {
            showError("ERROR_SISTEMA", ex.getMessage());
        }
    }

    public void actualizarPorFila(PropietarioDto propDto, int accion){
        manager.actualizarPorFila(propDto,accion,lista);
        cargarPropietariosRegistro();
    }
    
    public String guardar() {        
        manager.guardar(this.dto, this.lista);                    
        return null;
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        PropietarioMBean.logger = logger;
    }

    public PropietarioManager getManager() {
        return manager;
    }

    public void setManager(PropietarioManager manager) {
        this.manager = manager;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public List<PropietarioDto> getLista() {
        return lista;
    }

    public void setLista(List<PropietarioDto> lista) {
        this.lista = lista;
    }

    public PropietarioDto getDto() {
        return dto;
    }

    public void setDto(PropietarioDto dto) {
        this.dto = dto;
    }

    public String getKeyEntidad() {
        return keyEntidad;
    }

    public void setKeyEntidad(String keyEntidad) {
        this.keyEntidad = keyEntidad;
    }

    public OrganizacionDto getOrganizacionDto() {
        return organizacionDto;
    }

    public void setOrganizacionDto(OrganizacionDto organizacionDto) {
        this.organizacionDto = organizacionDto;
    }

    public List<OrganizacionDto> getListaOrganizaciones() throws DAOException {        
        this.listaOrganizaciones = this.organizacionManager.obtenerActivosPorEmpresa(new EmpresaDto(this.empresa));
        
        return listaOrganizaciones;
    }

    public void setListaOrganizaciones(List<OrganizacionDto> listaOrganizaciones) {
        this.listaOrganizaciones = listaOrganizaciones;
    }

    public Boolean getEstado() {
        return estado;
    }

    public void setEstado(Boolean estado) {
        this.estado = estado;
    }

    public Boolean getPrincipal() {
        return principal;
    }

    public void setPrincipal(Boolean principal) {
        this.principal = principal;
    }

    public Long getEmpresa() {
        return empresa;
    }

    public void setEmpresa(Long empresa) {
        this.empresa = empresa;
    }

}
